#ifndef REGISTROFRONTCODEDDATOS_H_
#define REGISTROFRONTCODEDDATOS_H_

#include <string>
#include <stdexcept>
#include "RegistroDatos.h"


class RegistroComprimidoDatos: public RegistroDatos {
private:
	unsigned short int _cantCoincidencias;
	std::string _claveComprimida;

	// Devuelve la diferencia entre dos claves
	std::string comprimirTermino(std::string clave, std::string claveAnterior, unsigned short int &cantCoincidencias) const;

	// Dada la diferencia devuelve la clave original
	std::string descomprimirTermino(std::string claveCompimida, std::string claveAnterior, unsigned short int cantCoincidencias) const;

	// Hago privado el getter porque se necesita la clave anterior para extraer la clave actual
	std::string getClave() const;

	virtual void ImprimirEn(std::ostream& out) const;

public:
	RegistroComprimidoDatos();
	RegistroComprimidoDatos(RegistroDatos& r);
	RegistroComprimidoDatos(std::string clave, std::string claveAnterior,
			unsigned int posRel, unsigned short int res = 0);
	virtual ~RegistroComprimidoDatos();

	// IRegistro
	int getSize() const;
	int serializar(char* arrBytes);
	int desSerializar(char* arrBytes);
	std::string getClave(std::string claveAnterior);

	// Para setear la clave comprimida
	void setClaveComprimida(std::string clave, std::string claveAnterior);
};

#endif /* REGISTROFRONTCODEDDATOS_H_ */
